let arr = [1, 2, 3]

// 遍历数组
for (let i =0; i< arr.length; i++) {
  console.log(arr[i]);
}


// forEach  
arr.forEach(function(element, index, array) {// 当前正在遍历对象,当前索引,被遍历的对象本身
  console.log(element, index ); 
})

//map 遍历每一个对象,并返回一个数组,不改变原数组
arr.map(function(value) {
  console.log(value);
  value += 1;
  return value
})

// filter 返回符合数组,
arr.filter(function(value) {
  console.log(value);
  return value === 2
})

// some 找到一个符合的条件 就返回true
let result = arr.some(function (value) {
  console.log(value);
  return value === 2
})
console.log(arr, result);


// 遍历数组,每一个条件都符合,返回true
let result = arr.every(function(value) {
  return value === 2
})


// reduce 参数 :1.方法(prev 上一次回调的返回值,当前正在处理的数组里的元素, 当前处理元素的索引, 原数组 ) ,
//        2 
// 接收一个函数作为累加器
// reduce求和
arr.reduce(function(prev, cur, index, array){
  return prev + cur
}, 0)

// reduce 求最大值
let max = arr.reduce(function(prev, cur){
  Math.max(prev, cur)
})

//reduce 数组去重
arr.reduce(function(prev, cur) {
  prev.indexOf(cur) == -1 && prev.push()
  return prev
}, [])



// for..in 
for (const index in arr) {  // 遍历时,会遍历到原型链上的方法
  console.log(index, arr[index]);
}

// es6 数组方法
// find  返回的是第一个通过测试的元素
arr.find(function(value) {
  return value == 2
}) 

//findIndex 返回第一个符合的下标
arr.findIndex(function(value) {
  return value == 2
})


// for of 
for(let item of arr.values()){

}

for(let item of arr) {

}

for(let item of arr.keys()){
  console.log(item);
}

for(let [index, item] of arr.entries()) {
  console.log(index, item);
}